﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TumbaloSoft.Models;
using IBatisNet.DataMapper;
using TumbaloSoft.Helpers;
using TumbaloSoft.Helpers.QueryObjects;
using System.Collections;

namespace TumbaloSoft.Controllers
{
    public class BalanceEconomicoEdificioController : TumbaloController
    {
        //
        // GET: /BalanceEconomicoEdificio/

        public ActionResult Configurar()
        {
            if (defaultAction != null) return defaultAction;

            try
            {
                Edificio ed;
                if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                {
                    IList listaedif = HelperEdificio.selectAll();
                    ViewBag.listaedif = HelperEdificio.selectAll();
                }
                else
                {
                    AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                    if (administrador == null) ed = null;
                    else
                    {
                        ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                    }
                    IList listaedif;
                    listaedif = new List<Edificio>();
                    listaedif.Add(ed);
                    ViewBag.listaedif = listaedif;

                }
            }
            catch (Exception ex)
            {
                Logger.Current.Error("Error de conección", ex);
                return View("~/Views/Shared/Error.cshtml");
            }


            BusquedaBalanceEconomicoEdificio busca = new BusquedaBalanceEconomicoEdificio();
            return View(busca);
        }
        [HttpPost]
        public ActionResult Configurar(BusquedaBalanceEconomicoEdificio busqueda, String tipoReporte)
        {
            if (defaultAction != null) return defaultAction;
            if (busqueda.prFecIni != null && busqueda.prFecFin != null && busqueda.prFecFin < busqueda.prFecIni)
            {
                ModelState.AddModelError("prFecIni", "La fecha de inicio debe ser menor que la fecha de fin");
            }
            
            if (ModelState.IsValid && busqueda.prEdificio != 0)
            {
                if (tipoReporte.ToUpper() == "HTML") return RedirectToAction("Visualizar", busqueda);
                else
                {
                    HelperPDF.HtmlToPDF("BalanceEconomicoEdificio/PDF?prEdificio=" + busqueda.prEdificio + "&prFecIni=" + busqueda.prFecIni.ToString("MM/dd/yyyy") + "&prFecFin=" + busqueda.prFecFin.ToString("MM/dd/yyyy"), "Balance Economico", 0,this);
                    return RedirectToAction("Configurar");
                }
            }
            else
            {
                try
                {
                    Edificio ed;
                    if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                    {
                        IList listaedif = HelperEdificio.selectAll();
                        ViewBag.listaedif = HelperEdificio.selectAll();
                    }
                    else
                    {
                        AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                        if (administrador == null) ed = null;
                        else
                        {
                            ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                        }
                        IList listaedif;
                        listaedif = new List<Edificio>();
                        listaedif.Add(ed);
                        ViewBag.listaedif = listaedif;

                    }
                }
                catch (Exception ex)
                {
                    Logger.Current.Error("Error de conección", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }



                return View("Configurar", busqueda);
            }
            
        }

        public ActionResult Visualizar(BusquedaBalanceEconomicoEdificio busqueda)
        {
            double ingresototal = 0, egresototal = 0, saldo = 0;

            if (defaultAction != null) return defaultAction;

            if (ModelState.IsValid && busqueda.prEdificio!=0)
            {

                
                IList egresos = HelperGastosComunes.egresos(busqueda);
                ViewBag.egresos = egresos;
                foreach (GastosComunes egr in egresos) egresototal += egr.prMonto;

                String titulo = "Balance Económico del: " + busqueda.prFecIni.ToShortDateString() + " al " + busqueda.prFecFin.ToShortDateString();
                String nbredificio = (HelperEdificio.selectById(busqueda.prEdificio)).prNombre;
                ViewBag.titulo = titulo;
                ViewBag.nbredificio = nbredificio;

                IList ingresos = HelperBalanceEconomico.ingresos(busqueda);
                ViewBag.ingresos = ingresos;
                foreach (Cuota igr in ingresos) ingresototal += igr.prMonto;
                saldo = ingresototal - egresototal;

                ViewBag.ingresototal = ingresototal;
                ViewBag.egresototal = egresototal;
                ViewBag.saldo = saldo;
                return View();
               //return reporteToPDF(busqueda);
            }
            else
            {
                try
                {
                    Edificio ed;
                    if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                    {
                        IList listaedif = HelperEdificio.selectAll();
                        ViewBag.listaedif = HelperEdificio.selectAll();
                    }
                    else
                    {
                        AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                        if (administrador == null) ed = null;
                        else
                        {
                            ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                        }
                        IList listaedif;
                        listaedif = new List<Edificio>();
                        listaedif.Add(ed);
                        ViewBag.listaedif = listaedif;

                    }
                }
                catch (Exception ex)
                {
                    Logger.Current.Error("Error de conección", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }   



                return  View("Configurar", busqueda);
            }
        }

       
        public ActionResult PDF(BusquedaBalanceEconomicoEdificio busqueda)
        {
            //if (defaultAction != null) return defaultAction;
            
            double ingresototal = 0, egresototal = 0, saldo = 0;

            if (ModelState.IsValid && busqueda.prEdificio != 0)
            {


                IList egresos = HelperGastosComunes.egresos(busqueda);
                ViewBag.egresos = egresos;
                foreach (GastosComunes egr in egresos) egresototal += egr.prMonto;

                String titulo = "Balance Económico del: " + busqueda.prFecIni.ToShortDateString() + " al " + busqueda.prFecFin.ToShortDateString();
                String nbredificio = (HelperEdificio.selectById(busqueda.prEdificio)).prNombre;
                ViewBag.titulo = titulo;
                ViewBag.nbredificio = nbredificio;

                IList ingresos = HelperBalanceEconomico.ingresos(busqueda);
                ViewBag.ingresos = ingresos;
                foreach (Cuota igr in ingresos) ingresototal += igr.prMonto;
                saldo = ingresototal - egresototal;

                ViewBag.ingresototal = ingresototal;
                ViewBag.egresototal = egresototal;
                ViewBag.saldo = saldo;

               // HelperPDF.HtmlToPDF("BalanceEconomicoEdificio/PDF?prEdificio=" + busqueda.prEdificio + "&prFecIni=" + busqueda.prFecIni.ToString("MM/dd/yyyy") + "&prFecFin=" + busqueda.prFecFin.ToString("MM/dd/yyyy"), "Cuota", 0, this);
                //return RedirectToAction("Configurar");
                return View();

                
            }
            else
            {
                try
                {
                    Edificio ed;
                    if (AccountController.getIdPerfil(HttpContext) == 3 || AccountController.getIdPerfil(HttpContext) == 0)
                    {
                        IList listaedif = HelperEdificio.selectAll();
                        ViewBag.listaedif = HelperEdificio.selectAll();
                    }
                    else
                    {
                        AdministradorEdificios administrador = HelperAdministrador.selectByIdPersona(AccountController.getIdPersona(HttpContext));
                        if (administrador == null) ed = null;
                        else
                        {
                            ed = HelperEdificio.selectById(HelperAdministrador.EdificioAdministradoSelect(administrador.prIdAdministrador));

                        }
                        IList listaedif;
                        listaedif = new List<Edificio>();
                        listaedif.Add(ed);
                        ViewBag.listaedif = listaedif;

                    }
                }
                catch (Exception ex)
                {
                    Logger.Current.Error("Error de conección", ex);
                    return View("~/Views/Shared/Error.cshtml");
                }


                return View("Configurar", busqueda);
            }
        }
    }
}
